package com.somiz.affectation;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.UIManager;
import javax.swing.border.TitledBorder;

import org.freixas.jcalendar.JCalendarCombo;
import org.hibernate.Session;

import com.gest.util.FilterComboBox;
import com.somiz.article.Article;
import com.somiz.main.Control;
import com.somiz.main.Principal;
import com.somiz.utilisateur.Utilisateur;
import com.tech.hibernate.HibernateUtil;

public class AffectationForm extends JPanel {
	private FilterComboBox C_article;
	private FilterComboBox C_utilisateur;
	private JCalendarCombo C_date;

	/**
	 * Create the panel.
	 */
	public AffectationForm() {
		Session session = HibernateUtil.getSessionFactory().openSession();
		C_utilisateur = ListeCombUtilisateur(session, C_utilisateur);
		C_article = ListeCombArticle(session, C_article);
		session.close();
		setLayout(null);
		JButton button = new JButton("");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Session session = HibernateUtil.getSessionFactory()
						.openSession();
				if (errForm(session).equals("")) {
					Affectation affectation = new Affectation();
					affectation = FormVersAffectation(affectation, session);
					Control.getAffectationDao().Creer(affectation, session);

					affectation.getArticle().setUtilisateur(
							affectation.getUtilisateurDest());
					Control.getArticleDao().modifier(affectation.getArticle(),
							session);
				} else {
					JOptionPane.showMessageDialog(null, errForm(session),
							"Erreur", JOptionPane.WARNING_MESSAGE);
				}
				session.close();
			}
		});
		button.setIcon(new ImageIcon(AffectationForm.class
				.getResource("/cc/black/png/save_icon&32.png")));
		button.setPreferredSize(new Dimension(50, 50));
		button.setMnemonic(KeyEvent.VK_ENTER);
		button.setBackground(Color.WHITE);
		button.setBounds(10, 11, 50, 50);
		add(button);

		JButton button_1 = new JButton("");
		button_1.setIcon(new ImageIcon(AffectationForm.class
				.getResource("/cc/black/png/delete_icon&32.png")));
		button_1.setPreferredSize(new Dimension(50, 50));
		button_1.setMnemonic(KeyEvent.VK_ENTER);
		button_1.setBackground(Color.WHITE);
		button_1.setBounds(72, 11, 50, 50);
		add(button_1);

		JSeparator separator = new JSeparator();
		separator.setBounds(10, 81, 423, 2);
		add(separator);

		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBorder(new TitledBorder(UIManager
				.getBorder("TitledBorder.border"), "A la reception :",
				TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panel.setBounds(10, 101, 423, 163);
		add(panel);

		JLabel label = new JLabel("Date :");
		label.setBounds(29, 26, 101, 27);
		panel.add(label);

		C_article.setBounds(129, 64, 224, 30);
		panel.add(C_article);

		JLabel label_1 = new JLabel("Code de l'equipement :");
		label_1.setBounds(29, 67, 101, 27);
		panel.add(label_1);

		JButton button_2 = new JButton("");
		button_2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (!C_article.getSelectedItem().toString().equals("")) {
					Article article = new Article();
					article.setCode(C_article.getSelectedItem().toString());
					Session session = HibernateUtil.getSessionFactory()
							.openSession();
					if (Control.getArticleDao().isExisteAvecCode(article,
							session)) {
						article = Control.getArticleDao().TrouverAvecCode(
								article, session);
						Control.getArticleForm().vider(session);
						Control.getArticleForm().ArticleVersForm(article);
						Control.getPrincipal()
								.getTabbedPane()
								.addTab("Article",
										new ImageIcon(
												Principal.class
														.getResource("/cc/black/png/cert_icon&16.png")),
										Control.getArticleForm(), null);
					} else {
						JOptionPane
								.showMessageDialog(
										null,
										"- Cette article n'existe pas dans votre base de donnees",
										"Erreur", JOptionPane.WARNING_MESSAGE);
					}
					session.close();
				} else {
					JOptionPane.showMessageDialog(null,
							"- Il faut renseigner le champ article", "Erreur",
							JOptionPane.WARNING_MESSAGE);
				}
			}
		});
		button_2.setIcon(new ImageIcon(AffectationForm.class
				.getResource("/cc/black/png/info_icon&24.png")));
		button_2.setBounds(367, 64, 30, 32);
		panel.add(button_2);

		C_utilisateur.setBounds(129, 105, 224, 30);
		panel.add(C_utilisateur);

		JLabel lblUtilisateur = new JLabel("Utilisateur  :");
		lblUtilisateur.setBounds(29, 108, 101, 27);
		panel.add(lblUtilisateur);

		C_date = new JCalendarCombo(JCalendarCombo.DISPLAY_DATE
				| JCalendarCombo.DISPLAY_TIME, true);
		C_date.setEditable(true);
		C_date.setBounds(133, 318, 239, 32);
		panel.add(C_date);
		C_date.setDateFormat(new SimpleDateFormat("dd-MM-yyyy"));
		C_date.setBounds(129, 11, 268, 32);

		JButton button_3 = new JButton("");
		button_3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (!C_utilisateur.getSelectedItem().toString().equals("")) {
					Utilisateur utilisateur = new Utilisateur();
					utilisateur.setNomPrenom(C_utilisateur.getSelectedItem()
							.toString());
					Session session = HibernateUtil.getSessionFactory()
							.openSession();
					if (Control.getUtilisateurDao().isExisteAvecNomEtPrenom(
							utilisateur, session)) {
						utilisateur = Control.getUtilisateurDao()
								.TrouverAvecNom(utilisateur, session);
						Control.getUtilisateurForm().vider(session);
						Control.getUtilisateurForm().UtilisateurVersForm(
								utilisateur);
						Control.getPrincipal()
								.getTabbedPane()
								.addTab("Utilisateur",
										new ImageIcon(
												Principal.class
														.getResource("/cc/black/png/cert_icon&16.png")),
										Control.getUtilisateurForm(), null);
					} else {
						JOptionPane
								.showMessageDialog(
										null,
										"- Ce utilisateur n'existe pas dans votre base de donnees",
										"Erreur", JOptionPane.WARNING_MESSAGE);
					}
					session.close();
				} else {
					JOptionPane.showMessageDialog(null,
							"- Il faut renseigner le champ utilisateur",
							"Erreur", JOptionPane.WARNING_MESSAGE);
				}

			}
		});
		button_3.setIcon(new ImageIcon(AffectationForm.class
				.getResource("/cc/black/png/info_icon&24.png")));
		button_3.setBounds(367, 105, 30, 32);
		panel.add(button_3);
	}

	public void vider(Session session) {
		C_date.setSelectedItem("");
		C_article.RemplireComboListe(Control.getArticleDao().ListeCodesArticle(
				session));
		C_utilisateur.RemplireComboListe(Control.getUtilisateurDao()
				.ListeNomsPrenomsUtilisateur(session));
	}

	public String errForm(Session session) {
		String err = "";
		if (C_date.getSelectedItem().toString().equals("")) {
			err = err + "- il faut donner une date\n";
		}
		Article article = new Article();
		article.setCode(C_article.getSelectedItem().toString());
		if (!article.getCode().equals("")
				&& !Control.getArticleDao().isExisteAvecCode(article, session)) {
			err = err
					+ "- cet article n'existe pas dans votre base de donnees\n";
		}
		Utilisateur utilisateur = new Utilisateur();
		utilisateur.setNomPrenom(C_utilisateur.getSelectedItem().toString());
		if (!utilisateur.getNomPrenom().equals("")
				&& !Control.getUtilisateurDao().isExisteAvecNomEtPrenom(
						utilisateur, session)) {
			err = err
					+ "- cet utilisateur n'existe pas dans votre base de donnees\n";
		}
		return err;
	}

	public Affectation FormVersAffectation(Affectation affectation,
			Session session) {
		affectation.setDate(C_date.getDate());

		Article article = new Article();
		article.setCode(C_article.getSelectedItem().toString());
		affectation.setArticle(Control.getArticleDao().TrouverAvecCode(article,
				session));

		Utilisateur utilisateur = new Utilisateur();
		utilisateur.setNomPrenom(C_utilisateur.getSelectedItem().toString());
		affectation.setUtilisateurDest(Control.getUtilisateurDao()
				.TrouverAvecNom(utilisateur, session));

		return affectation;
	}

	public void AffectationVersForm(Affectation affectation) {
		C_date.setDate(affectation.getDate());
		C_article.setSelectedItem(affectation.getArticle().getCode());
		C_utilisateur.setSelectedItem(affectation.getUtilisateurDest());
	}

	public FilterComboBox ListeCombUtilisateur(Session session,
			FilterComboBox comboBox) {
		Utilisateur utilisateur = new Utilisateur();
		List<Utilisateur> utilisateurs = Control.getUtilisateurDao().charger(
				utilisateur, session);
		List<String> listeRet = new ArrayList<String>();
		listeRet.add("");
		if (utilisateur != null) {
			for (int i = 0; i < utilisateurs.size(); i++) {
				listeRet.add(utilisateurs.get(i).getNomPrenom());
			}
		}
		comboBox = new FilterComboBox(listeRet);
		return comboBox;
	}

	public FilterComboBox ListeCombArticle(Session session,
			FilterComboBox comboBox) {
		Article article = new Article();
		List<Article> articles = Control.getArticleDao().charger(article,
				session);
		List<String> listeRet = new ArrayList<String>();
		listeRet.add("");
		if (article != null) {
			for (int i = 0; i < articles.size(); i++) {
				listeRet.add(articles.get(i).getCode());
			}
		}
		comboBox = new FilterComboBox(listeRet);
		return comboBox;
	}

	public void desactiverFormDonneesExt() {

	}
}
